.\" This man page is Copyright (C) 1999 Claus Fischer.
.\" Permission is granted to distribute possibly modified copies
.\" of this page provided the header is included verbatim,
.\" and in case of nontrivial modification author and date
.\" of the modification is added to the header.
.\"
.\" 990620 - page created - aeb@cwi.nl
.\"
.TH FIFO 7 2016-12-12 "Linux" "Linux Programmer's Manual"

.SH NAME
fifo \- 先进先出的特殊文件, 命名管道

.SH "描述"
一个先进先出（FIFO）的特殊文件（一个命名管道）类似一个管道，但它是作为文件系统的
一部分来访问的。
可以同时有多个进程打开它进行读写。当进程间通过 FIFO 交换数据时，内核会在其内部传送
所有数据，而不会写入文件系统。即，FIFO 特殊文件在文件系统中没有任何内容；
文件系统中的文件条目只是作为一个参照点而已，使得进程可以用文件系统中的一个名字
对其进行访问。
.PP
内核会为至少有一个进程打开了的 FIFO 特殊文件维护单独一个管道对象。
在数据经由 FIFO 传输之前，FIFO 的两端（读和写）必须同时打开。
一般来说，打开 FIFO 的行为会阻塞，直至另一端也被打开。
.PP
一个进程可以使用非阻塞模式打开一个 FIFO。这种情况下，即使写端没有打开，
打开读端还是会成功。但是，如果读端没有打开，打开写端会失败，并且得到
一个
.B ENXIO
（设备或地址不存在）。
.PP
在 Linux 下，不管是阻塞还是非阻塞模式，打开一个 FIFO 用作同时读写都会成功。
POSIX 对于这种情况未进行定义。这个可以用来在读端不可用的情况下打开写端。
一个进程在同时用同一个 FIFO 的两端来实现自己和自己通信的时候要特别小心，
应避免出现死锁。
.SH "注释"
当一个进程企图向读端没有打开的 FIFO 写数据的时候，进程会收到一个
.B SIGPIPE
信号。

FIFO 特殊文件可以用
.BR mkfifo (3)
来创建，并且
.IR "ls -l"
会对其添加一个特殊标记“p”进行指示。

.SH "参见"
.BR mkfifo (1),
.BR open (2),
.BR pipe (2),
.BR sigaction (2),
.BR signal (2),
.BR socketpair (2),
.BR mkfifo (3),
.BR pipe (7)

.SH "跋"
本页面原英文版是 Linux
.I man-pages
项目 4.09 版的一部分。
如需了解这个项目的描述、汇报漏洞的相关信息及本页面的最新版本，
请访问
\%https://www.kernel.org/doc/man\-pages/.
.\" manpages-zh translator: Boyuan Yang <073plan@gmail.com>
.\" manpages-zh date: 2016-12-16
.\" manpages-zh orig-date: 2016-12-12
